# 等号赋值
# 等号赋值本质上是将一个对象的赋值给另一个变量，
# 两个变量指向的是内存中的同一个对象。
# 对一个变量修改，另一个变量也会受影响。

list1 = [1, 2, 3]
list2 = list1

list1.append(4)

print(f"list1: {list1}")
print(f"list2: {list2}")


# 浅拷贝
# 创建一个新的对象，但只是复制对象中的嵌套对象，而不是创建新的嵌套对象。
# 新对象和原对象的嵌套对象仍然指向同一个内存地址。
import copy

# 嵌套列表
list1 = [1, [2, 3]]
# 进行浅拷贝
list2 = copy.copy(list1)

# 修改外层列表
list1.append(4)
# 修改嵌套列表
list1[1].append(5)

# 打印两个列表
print(f"list1: {list1}")
print(f"list2: {list2}")


# 深拷贝
# 深拷贝会递归地复制对象及其所有嵌套对象，创建一个完全独立的新对象
import copy

# 嵌套列表
original_list = [[1, 2], [3, 4]]

# 深拷贝
deep_copy = copy.deepcopy(original_list)

# 修改原始列表中的嵌套列表元素
original_list[0][0] = 99

print("原始列表:", original_list)
print("深拷贝列表:", deep_copy)